const express = require("express");
const path = require("path");
const app = express();
// 引入body-parser模块 用来处理post请求参数,不加这个中间件，即使前端传了参数，后台req.body中也是空的
const bodyParser = require("body-parser");
// 导入express-session模块
const session = require("express-session");
// 用户路由,投入实际应用
const user = require("./routes/user");
// 商品路由,投入实际应用
const goods = require("./routes/goods");
// 混合路由,可能用户和商品都有涉及
const mixRouter = require("./routes/mixRouter");
const port = 3000;
// 引入数据库集合,实际应在对应路由中引入, 而不是在应用入口app.js中引入
require("./model/connect");
require("./model/user");
require("./model/goods");
// 解析(post请求的json参数) application/json
app.use(bodyParser.json({ limit: '50mb' }));
// 解析(post请求的表单参数) application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ 
    limit: '50mb',
    extended: true 
}));

// 解决跨域问题;
app.use("*", function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*"); //这个表示任意域名都可以访问，这样写不能携带cookie了。
    //res.header('Access-Control-Allow-Origin', 'http://www.baidu.com'); //这样写，只有www.baidu.com 可以访问。
    res.header(
        "Access-Control-Allow-Headers",
        "Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild"
    );
    res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS"); //设置方法
    if (req.method == "OPTIONS") {
        res.sendStatus(200); // 意思是，在正常的请求之前，会发送一个验证，是否可以请求。
    } else {
        next();
    }
});
// node里面的路由大多是负责响应数据
// 利用Express托管静态文件,用绝对路径更安全
// 当输入根路径时，下面的配置会路由到public下的index.html页面
app.use(express.static(path.join(__dirname, "dist")));
// 配置session
app.use(
    session({ secret: "secret key", resave: false, saveUninitialized: true })
);

// 注册路由,使生效
app.use("/user", user);
app.use("/goods", goods);
app.use("/mixRouter", mixRouter);
app.listen(port, () => {
    console.log("server running at localhost:3000\n" + __filename);
});